import { ref } from 'vue';
import { defineStore } from 'pinia';
import { getDictOptionsByCodes } from '@/api/dict';
import { DICT_TYPE_HOMEPAGE_MESSAGE, DICT_TYPE_HOT_KEY_WORDS } from '@/constants/dict';

/**
 * 公共状态，一般用来存储长时间不需要即时更新的数据（重新登录才能更新）
 */
export const useCommonStore = defineStore(
  'commonState',
  () => {
    /**
     * 滚动通知列表
     * @type {import('vue').Ref<string[]>}
     * @description 存储首页滚动显示的通知消息
     */
    const noticeList = ref<string[]>([]);

    /**
     * 热门搜索关键词列表
     * @type {import('vue').Ref<string[]>}
     * @description 存储热门搜索关键词，用于搜索建议
     */
    const hotKeyWords = ref<string[]>([]);

    /**
     * 获取字典数据
     * @returns {Promise<any>} 字典数据Promise
     * @description 从API获取滚动通知和热门搜索关键词的字典数据
     */
    const getDictionary = async () => {
      try {
        const typeCodes = [DICT_TYPE_HOMEPAGE_MESSAGE, DICT_TYPE_HOT_KEY_WORDS];
        const response = await getDictOptionsByCodes(typeCodes.join(','));
        const res = response.data as [];

        noticeList.value = res[DICT_TYPE_HOMEPAGE_MESSAGE]?.map(item => item.value) || [];
        hotKeyWords.value = res[DICT_TYPE_HOT_KEY_WORDS]?.map(item => item.value) || [];

        return res;
      } catch (error) {
        throw error;
      }
    };

    return {
      noticeList,
      hotKeyWords,
      getDictionary
    };
  },
  {
    // 进行持久化存储
    persist: {
      key: 'commonState',
      storage: window.localStorage
    }
  }
);
